package cn.com.dhcc.ddi.task.dao;

import cn.com.dhcc.app.core.dao.BaseDao;
import cn.com.dhcc.app.core.exception.DaoException;
import cn.com.dhcc.app.core.handler.modulehandler.WhereCondition;
import cn.com.dhcc.app.core.util.CollectionUtil;
import cn.com.dhcc.app.pub.CM;
import cn.com.dhcc.ddi.datasource.vo.TableInfoVo;
import cn.com.dhcc.ddi.task.vo.TableLog;
import org.springframework.stereotype.Repository;

import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

/**
 * 收集数据库变化量日志
 *
 * @日期：2016/11/16 9:31
 * @作者：张洪涛
 * @版权所有：东华软件
 * @版本：1.0
 */
@Repository
public class GatherChangeDbDateDao extends BaseDao {

    public Map<String, TableLog> getTableLogBySysId(String taskId, List<TableInfoVo> taskTables) throws DaoException {
        WhereCondition searchParameter = new WhereCondition();
        searchParameter.where().eq("task_id", taskId);
        List<TableLog> tableLogs = CM.getDao().listModule("根据系统id获取表同步日志", TableLog.class, searchParameter);
        if (CollectionUtil.hasElement(tableLogs)) {
            Map<String, TableLog> mapTableLog = new HashMap<String, TableLog>();
            for (TableLog tableLog : tableLogs) {
                if (tableLog.getTempLastValue() == null || "".equals(tableLog.getTempLastValue())) {
                    String tableName = tableLog.getTableName();
                    mapTableLog.put(tableName, tableLog);
                } else {
                    if (taskTables != null) {
                        for (Iterator<TableInfoVo> iterator2 = taskTables.iterator(); iterator2
                                .hasNext(); ) {
                            TableInfoVo table = iterator2.next();
                            //如果同一个接收系统+数据源+表 对应的同步日志里面有说明还有一个任务在执行当前表，等待下次执行
                            if (table.getTableName().equalsIgnoreCase(tableLog.getTableName())) {
                                iterator2.remove();
                            }
                        }
                    }
                }
            }
            return mapTableLog;
        }
        return null;
    }
}
